package com.shujia.spark.core

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object Demo17SubmitCluster {
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()
    conf.setAppName("Demo17SubmitCluster")

    //提交到集群中运行不需要写   ， 在提交任务的时候设置 --master yarn-client
    //conf.setMaster("local")

    val sc = new SparkContext(conf)

    //指定hdfs路径  默认读取目录下的所有文件
    val linesRDD = sc.textFile("/data/words/")

    val wordsRDD = linesRDD.flatMap(line => line.split(","))

    val kvRDD = wordsRDD.map(word => (word, 1))

    val countRDD: RDD[(String, Int)] = kvRDD.reduceByKey(_ + _)

    //将结果保存到hdfs
    countRDD.map(kv => kv._1 + "\t" + kv._2).saveAsTextFile("/data/word_count")


    /**
      * 提交任务  1、指定类名  2、指定jar包  3、指定运行方式  4、指定资源（Executor内存 cpu  和Executor的数量）
      * executor是一个进程   负责执行task
      * --executor-memory 512M  executor的内存
      * --num-executors 2   executor的数量  越多同一时刻能启动的task就越多 指定速度就越快
      * --executor-cores 1     每个executor的cpu的数量   决定了每个executor同一时刻能执行几个线程
      * spark-submit --class com.shujia.spark.core.Demo17SubmitCluster --master yarn-client  --executor-memory 512M --num-executors 2 spark-1.0.jar
      *
      * hadoop dfs -ls /data/word_count/
      */
  }
}
